关于字符型数组a[20]内空白部分是否为'/n'

来源:百度知道 编辑:UC知道 时间:2024/09/25 14:39:30
如果执行程序时输入a 但输入的字符串不足20个长度, 比如说时10个长度, 那么剩下的10个长度里内容是什么 我记得时'/n' 但好像不时 问什么必须要用 memset(a,0,sizeof(a))这个才行

不是默认的吗 请大家解释一下 谢谢了
不懂 帮我看看这个程序 求回文的 (回文:指正着读和反着读都一样 例如 asddsa 或123321或ABCBA)
问什么去掉了memset(a,0,sizeof(a));这个就不行了呢
#include<iostream.h>
#include <memory>
void main()
{
char a[20];
memset(a,0,sizeof(a));
char *p=NULL,*q=NULL;

q=a;
p=a;
cout<<"输入字符串a:";
cin>>a;
for( p=a ; *p!='\0' ; p++)
{;}
p--;

while(*p==*q)
{
p--;
q++;
}

if(*q=='\0')
{
cout<<"是回文数"<<endl;
}
else
{
cout<<"不是回文数"<<endl;
}
}

[问题补充的答案]:
楼主看了我之前的回答,应该知道不用memset可能会出错。
while(*p==*q)
{
p--;
q++;
}
这段代码由问题。
下面给出一段内存中的数据,楼主仔细看看,下面的!还是表示字符串结束符号'\0'。
---------------a
---------------p----------q-------------
fasdg!!sdf!!!ABCCBA!fdseigoadeqw
p,q是指针,看到了吗?
这时候p和q还是相等的,他们都指向!了。
本来ABCCBA是回文数,但是p却指向数组a前面的地方去了,这。。。。岂不是会出大问题。
试试改成这样:
--------------------------------------
while(*p==*q)
{
p--;
q++;
if(++p=a)
{break;}
}
--------------------------------------

答案:
memset(a,0,sizeof(a));
作用是把a在内存中分配的空间,全部都添上字符'\0'.

也就是说把a[20]得20个空间都添上了'\0'。
如果把abcdefghij这个长度为10得字符串给a,那么
a得后十个字符还是'\0',
而'\0'是字符串结束符,这样确保了读取内存时不会出错。

即使不用memset函数,绝大多数情况不会出错。但是有可能会出错。举个例子:
假设我们定义了一个字符传b[25],在内存中存储如下:
1234567890123456789012345
这时候,如果b没用了,那么指针b会被删除,但内存中的字符串1234567890123456789012345不会消失,就这样残留在内